#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__author__ = "Administrator"
__name__="decorator_arguments"
__date__="2016/9/22"
__time__="9:41"
"""
# 带参数的装饰器
# 外层多了一层包装。

def deco(arg1,arg2):
    # 由于有参数的decorator函数在调用时，只会使用应用时的参数，而不接收被装饰的函数作为参数，所以必须在其内部在创建一个函数
    def _deco(func):    # 定义一个新的decorator函数。
        def __deco():
            a = arg1()
            print 'before -- %s' % a
            #return a   # 如果有return值，则不在继续往下执行
            func()
            print 'after -- %s' % arg2
        return __deco
    return _deco

def haha():
    print 'haha'

@deco(haha,'models')
def myfunc():
    print 'myfunc ---- hello'


myfunc()
print '============='
myfunc()

'''
myfunc = deco('model')(myfunc)
即可以将最外层装饰器函数去掉来看：myfunc=func
函数没有return值，则返回None
装饰器返回函数，python会自动去调用这个函数
'''
